package com.kuang.system.service;

import com.kuang.bascic.service.BaseServiceImpl;
import com.kuang.org.domain.Department;
import com.kuang.system.domain.Menu;
import com.kuang.system.mapper.MenuMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class MenuServiceImpl extends BaseServiceImpl<Menu> implements MenuService {
    @Autowired
    private MenuMapper menuMapper;
    @Transactional
    @Override
    public void addDepartment(Menu menu) {
        menuMapper.addDepartment(menu);
//        // 将增加开启为主键自增 在xml里 useGeneratedKeys="true" keyColumn="id" keyProperty="id"
//        this.UpdateDepartment(menu);
    }

    @Override
    public void UpdateDepartment(Menu menu) {
//        //1 设置一个空的  dirPath
//        String dirPath = "";
//        // 如果parent为空就是顶级部门 dirPath+id
//        if (menu.getParent() == null) {
//            dirPath = "/" + menu.getId();
//        } else {
//            // 不等于空找到父级部门获取父级部门的dirpath在加上自己的id
//            // 如果parent不为空就是查找父级部门的dirPath加上自己的id
//            Menu department1 = menuMapper.selectDepartmentById(menu.getParent().getId());
//            dirPath = department1.getUrl() + "/" + menu.getId();
//        }
//        // 放在最后 因为需要吧前面的设置完成才可以调用增加方法
//        menu.setComponent(dirPath);
        menuMapper.UpdateDepartment(menu);
    }
    @Override
    public List<Menu> selectTreeDepartment() {
        // 1查询出所有的部门
        List<Menu> menus = menuMapper.selectAllDepartment();
        // 思路： 将所有部门放进map key：为自己的id vulue：自己部门
        Map<Long, Menu> menuMaps = new HashMap<>();
        for (Menu d : menus) {
            // 遍历全部部门 将所有部门放进map key：为自己的id vulue：自己部门
            menuMaps.put(d.getId(), d);
        }
        // 2.查出所用的顶级部门  parent_id =null的部门
        List<Menu> leve1List = new ArrayList<>();
        for (Menu dept : menus) {
            if (dept.getParent_id() == null) {
                // 如果等于空说明这个部门是顶级部门 放入顶级部门的数组
                leve1List.add(dept);
                // 说明是子级部门 将自己加入父级部门
                // 这里根据集合的方法根据dept的parent_id去匹配集合的id查到的是当前的父部门
            } else {
                Menu parent = menuMaps.get(dept.getParent_id());
                if (parent != null) {
                    parent.getChildren().add(dept);
                }
            }
        }
        return leve1List;

    }

}
